package com.xiao.handler.mp;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.xiao.exception.SystemException;
import com.xiao.utils.SecurityUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component// 自动填充
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override // insert 时,填充
    public void insertFill(MetaObject metaObject) {

        this.setFieldValByName("createBy",this.getUserId(),metaObject);
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateBy",this.getUserId(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);

    }

    @Override// update 时,填充
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateBy",this.getUserId(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }


    public Long getUserId(){
        Long userId =null;
        try {
            // 例如: 注册的时候 是没有 token 的所以访问方法会报错，先 try catch
            userId = SecurityUtils.getUserId();
        } catch (NullPointerException e) {
            /** mybatis_plus 自动填充时会用到  SecurityUtils.getUserId();
             *  但是没有登录的话，是没有 Authentication 认证信息的,但是确实有些操作是不需要登录的，例如: 修改文章表的 浏览量，就是系统级别操作。因此这里设置为 -1
             */
            userId= -1L;
        }
        return userId;
    }

}
